|
Gearswap Support Thread
Shiva.Siral
Serveur: Shiva
Game: FFXI
Posts: 193
By Shiva.Siral 2013-12-25 07:45:35
Just looking for someone to explain this addon a bit for me. It looks like it is an alternative to Spellcast.
Is it going to be replacing Spellcast? In which ways is it better or worse. I don't know any programming but I've slowly learned more and more about spellcast and the 'language' used in gearswap is confusing to me.
It says it uses packets so it potentially could be more detectable? but does that also eliminate any lag that spellcast may encounter?
I plan on redoing my PUP xml to include pet casting sets thanks to the new addon petschool. I'm just not sure if it's worth it to just wait until gearswap gets more popular or to go ahead and do it in spellcast.
If anyone could give me more info I'd greatly appreciate it.
By Byrthnoth 2013-12-25 08:11:48
Well, here's something I wrote on BG, slightly updated:
Quote: First I'll tackle Shortcuts and GearSwap. Before I can really explain what they are and how they're useful, I need to explain how Spellcast works.
Spellcast:
Spellcast loads your .xml file into memory. This file is interpretted each time Spellcast detects a relevant action in your outgoing text buffer. Spellcast iterates over the file once replacing all the standard variables (%Spell, etc.) and then once for each variable you use (in alphabetical order). This is monumentally inefficient, which is why some users experience lag when using complicated spellcast files.
Anwyay, it does all this replacement on the .xml text and then goes through and interprets the resulting logic, generating precast, midcast, and aftercast sets as relevant. It outputs these sets as a series of "input /equip <slot> <gear> <me>;" commands in console (with one /raw /prefix "spell name" <target> command), essentially as a temporary oldschool windower equipment swapping script. The wait commands between precast, midcast, and aftercast are determined by your cast/precast/midcast/aftercast delays and there is no logic after that.
The features can basically be broken down into this:
1) Interpret outgoing text (including shortened forms of spells, spells without prefixes, etc.)
2) Generate a script of equipment changing and dump it into console with the defined "wait" values and the associated /raw command
3) Remove the "/raw " and don't interpret anything prefixed with /raw.
4) Replace any instances of %variables in the outgoing text buffer (for example, %EquipMain).
Shortcuts:
Shortcuts handles the first feature of Spellcast. It does outgoing text interpretation, and I daresay it does it pretty well. It does:
1) Interprets the slugged form of spell names (cure4 = "Cure IV", these are just permutations of the spell names)
2) Default alias interpretation (c4 = Cure IV, these are aliases in the resources)
3) Creates targets if they aren't provided
4) Handles double "//" commands
5) Autocompletes targets -- If you handed Spellcast an invalid target, it would look up the potential targets in your party array and see if the invalid target could possibly be any of them. Shortcuts does this but also looks through the entire monster array. In the case of multiple results, priority will be given to names that start with the phrase you entered. If there are still multiple results, priority will be given to the closest character.
6) Handles single "/" commands -- /cure4 works the same way that //cure4 does. Saves you a character.
7) Handles ambiguous cases. -- /blizzard2 on SMN sub BLM would give you /pet "Blizzard II" <t> if you had Shiva out and the BP:Rage recast timer was below 2 seconds, otherwise it would give you /ma "Blizzard II" <t>. This also works for ambiguous monsterskills, blue magic, BST pet commands, etc.
8) Autocompletes targets for non-battle commands -- /c, /t, /em, /pcmd, etc. It is glorious to be able to check the bazaar of a character named "Pooooooooooo" with /c po.
I've italicized the cases that are also handled by Spellcast. The others are unique to Shortcuts. Please let me know if you find something that is not working.
GearSwap:
GearSwap handles the second and third features of Spellcast. It interprets properly formed incoming chat commands and allows you to swap gear in response to them. However, the way that it does this is a little bit different from Spellcast.
First, GearSwap user files are written in Lua and loaded into memory as code chunks instead of text. When you write a GearSwap file, you are actually writing a part of the program that will load when you are on the relevant job. This means it's very fast and should not cause lag even on your Pentium III Craptop. You can use it like a real scripting language, because it is a real scripting language. There are also a bunch of guides for scripting in Lua because WoW used it for their addons.
Second, GearSwap is modular. Instead of having one file that you interpret once at one point in time and generate all your sets from, you have several functions in your GearSwap file that are called at specific points in time. This allows you to react to changing conditions. Do you want to change to your PDT TP set if your Utsusemi casting is interrupted? You can do that now.
Third, GearSwap defines its precast, midcast, and aftercast time points based on actual game information, rather than simply making them a predefined wait. This also allows me to include pet_midcast and pet_aftercast. Here's how they're defined:
1) precast - This function is executed before the spell is put into the outgoing text buffer, so before your ability. Some features (like cancel_spell or verify_equip) only work in this function.
2) midcast - This function is executed after receiving a "readies" action packet. If you were casting Fire IV, this would be the "Jim starts casting Fire IV" message. Instant actions (like JAs and pet commands) have no midcast.
3) aftercast - This function is executed after receiving the "result" action packet. If you were casting Fire IV, this would be the "Fire IV does 3250 damage to so-and-so" message. This also fires for failures, like "Yumcax is out of range."
4) pet_midcast - Pet midcast fires when you get a "readies" action packet for your own pet. So, "Shiva readies Heavenly Strike." or "Automaton starts casting Cure IV"
5) pet_aftercast - Pet aftercast fires when you get a "result" action packet for your own pet. So "Heavenly Strike does 9500 damage." This also fires for failures.
Fourth, GearSwap injects equip packets to change gear instead of pushing equip commands into the outgoing text buffer. This makes it so you can swap equipment with menus open, including your equipment menu (which lets you watch your gear change). This was a major pet peeve of mine with SpellCast. Also, no more "Equipment changed." messages.
Fifth, GearSwap rejects input for 1 second after sending an outgoing command. If you're a macro spammer (like me), then this will prevent you from accidentally swapping back to your precast gear after you put on your midcast gear. The server rejects input for at least 1 second after entering a command anyway, so this costs you nothing and helps ensure you're wearing the right gear. It doesn't do this anymore automatically, but the framework is still there and you can implement it if desired.
Sixth, GearSwap allows you to react to events that people formerly relied on AutoExec + Dummy spells + Spellcast for. These would be status_change (engaged, idle, etc.), buff_change (gain a march, lose a march, etc.) and self_command. Additionally, we intend to get windower.register_event() working in user files, which would let you basically react to any change with a little work. There's also an initialization (get_sets) and unload (file_unload) event.
Seventh, GearSwap actually tells you the number of each buff that is active on yourself. buffactive['march'] will either return 0, 1, or 2, for instance. This allows you to finally make automatic delay cap sets.
There are more differences, but these are the most immediately noticeable changes. Spellcast is a wooden bicycle with square wheels and GearSwap is a modern racing bike. Check out the documentation and example files, which download into ../addons/GearSwap/beta_examples_and_information.
-- Also, be aware that GearSwap is still in beta. I do not anticipate major API changes, but anything is possible. --
The fourth feature of Spellcast (%variable replacement in the outgoing text buffer) is currently unhandled. It's not a difficult addon to make, but I have made too many addons and can hardly support the ones that I've released. Someone else will have to take that one.
If you find problems, please report them: https://github.com/Byrth/Lua/issues
As far as packet injection, many plugins and addons inject or modify packets (now). They basically fall into two categories:
1) Outgoing modification/injection - Questionably safe in theory.
2) Incoming modification/injection - Except in situations where you inject an incoming packet that generates an outgoing packet, very safe in theory.
Now, I say " in theory" above because the fact of the matter is that Windower has been doing outgoing packet injection for years and SE has yet to do anything about it. Every time lightluggage sorts your inventory or passes something, that's an injected packet. Itemizer/GearCollector moving crap around? Injected packets. When packet injection is done properly, it appears to be reasonably safe in practice. Now... you can probably still get banned for doing packet injection poorly and sending packets that the normal client would never have generated... in theory. In practice, I've sent a shitton of bad packets over the last few months, exceeded any kind of reasonable packets/second metric, etc. and never heard from a GM. It seems like SE is asleep at the wheel, but obviously it's safer to be conservative about this than to just go all willy-nilly packety-injecty, so afaik we're rejecting outgoing packet injection/manipulation addons from the repository that haven't been tested extensively.
Shiva.Siral
Serveur: Shiva
Game: FFXI
Posts: 193
By Shiva.Siral 2013-12-25 09:03:32
Thanks much for your response. I understood *most* of what you said. haha. It was exactly what I was looking for.
The advantages of gearswap makes me want to at least try to figure some of it out. I think I'll just start by building new gearsets for any possible situation I can think of and then try to slowly implement them into a file.
Out of curiousity can gearswap differentiate between the automaton nuking or healing. Or maybe even get more advanced than that? Like read pet_midcast and then depending on the type of spell choose which gear to change into?
As far as the master I assume you set the specific JA/etc in the precast and then follow up with the appropriate midcast(similar to spellcast), but if pets only have midcast I just wasn't sure if it could read the spell and immediately know what midcast to use?
Not sure if that makes sense, like I said I'm not very educated on programming.
I'll be sure to read the documentation, I'm sure it will answer a handful of questions. I'm just at work right now and rather wait to jump into it when I can fiddle with it with ffxi open too.
Lakshmi.Byrth
VIP
Serveur: Lakshmi
Game: FFXI
Posts: 6184
By Lakshmi.Byrth 2013-12-25 09:17:22
Check out the summoner example file that downloads when you activate gearswap in the launcher.
I pass in exactly the spell/ability to the pet_midcast function, so you can even macro Cure III and IV differently if you want.
[+]
Phoenix.Lithical
Serveur: Phoenix
Game: FFXI
Posts: 194
By Phoenix.Lithical 2013-12-25 11:53:07
Fifth, GearSwap rejects input for 1 second after sending an outgoing command. If you're a macro spammer (like me), then this will prevent you from accidentally swapping back to your precast gear after you put on your midcast gear. The server rejects input for at least 1 second after entering a command anyway, so this costs you nothing and helps ensure you're wearing the right gear. It doesn't do this anymore automatically, but the framework is still there and you can implement it if desired.
How would I go about implementing this? Would help me out a ton on WHM
Lakshmi.Byrth
VIP
Serveur: Lakshmi
Game: FFXI
Posts: 6184
By Lakshmi.Byrth 2013-12-25 11:58:40
From BG yesterday:
Code function precast(spell,abil)
if midaction() then
midaction_counter = midaction_counter + 1
if midaction_counter > 3 then
midaction(false)
midaction_counter = 0
else
return
end
else
midaction_counter = 0
end
end The above code would prevent your first 3 attempts to start a new action after initiating an action. The below code just adds the 1 second midaction delay back in, for those that liked it:
Code function precast(spell,abil)
if midaction() then
return
else
windower.send_command('wait 1;gs c midact')
end
end
function self_command(cmd)
if cmd == 'midact' then
midaction(false)
end
end
Serveur: Phoenix
Game: FFXI
Posts: 282
By Phoenix.Chomeymatt 2013-12-25 12:09:43
From BG yesterday:
Code function precast(spell,abil)
if midaction() then
midaction_counter = midaction_counter + 1
if midaction_counter > 3 then
midaction(false)
midaction_counter = 0
else
return
end
else
midaction_counter = 0
end
end The above code would prevent your first 3 attempts to start a new action after initiating an action. The below code just adds the 1 second midaction delay back in, for those that liked it:
Code function precast(spell,abil)
if midaction() then
return
else
windower.send_command('wait 1;gs c midact')
end
end
function self_command(cmd)
if cmd == 'midact' then
midaction(false)
end
end
What file would you paste that into?
[+]
Phoenix.Suji
Serveur: Phoenix
Game: FFXI
Posts: 962
By Phoenix.Suji 2013-12-25 12:31:55
Phoenix.Chomeymatt said: »What file would you paste that into? It goes into your <Player>_<Job>.lua within Addons/GearSwap/data but if you already have a GearSwap file for your job, just pasting won't be enough. You'll have to merge the desired functionality into your GearSwap file. There can only be one definition of those functions.
Hades.Triet
Serveur: Hades
Game: FFXI
Posts: 1615
By Hades.Triet 2014-01-02 17:32:02
Blargh...now I must learn the ways of writing scripts for Gearswap as I was just getting the hang of Spellcast...is there somewhere where I can read up on what the hell it all means? Its gibberish to me at the moment.
[+]
Lakshmi.Eyrhika
Serveur: Lakshmi
Game: FFXI
Posts: 764
By Lakshmi.Eyrhika 2014-01-02 17:49:40
Blargh...now I must learn the ways of writing scripts for Gearswap as I was just getting the hang of Spellcast...is there somewhere where I can read up on what the hell it all means? Its gibberish to me at the moment.
Im kinda in the same boat.. I was able to frankenstein an existing gearswap to work basics on WAR, but things like locking twilight when weak still escape me
[+]
Hades.Triet
Serveur: Hades
Game: FFXI
Posts: 1615
By Hades.Triet 2014-01-02 18:57:35
anyone able to help clarify what it is I am doing wrong? I keep getting error "...lua:3: '=' expected near 'Affinity'" error when I try to load Gearswap, here is the line:
Code sets.precast.ChainAffinity = {head="Mavi Kavuk +2"}
By Miang 2014-01-02 19:08:30
Don't think you can use . twice like that in one line, change it to Code sets.precast['Chain Affinity'] = {head="Mavi Kavuk +2"}
I'm new to lua so I'm still finding the way it handles objects/associative arrays strange too
Hades.Triet
Serveur: Hades
Game: FFXI
Posts: 1615
By Hades.Triet 2014-01-02 19:11:17
Don't think you can use . twice like that in one line, change it to Code sets.precast['Chain Affinity'] = {head="Mavi Kavuk +2"}
I'm new to lua so I'm still finding the way it handles objects/associative arrays strange too Still gave the same error after reload><
By Miang 2014-01-02 19:12:02
Locking isn't as easy as spellcast at the moment, but one of the ways I'm seeing being suggested is as follows:
Code
equip({head="Twilight Helm",body="Twilight Mail"})
send_command('@wait 0.5;gs disable head body;')
By Miang 2014-01-02 19:17:48
My bad, looking at Byrth's examples, we need to define the sub table as a table first:
Code sets.precast = {}
sets.precast.ChainAffinity = {head="Mavi Kavuk +2"}
Just tried that and worked on mine
Fenrir.Jinjo
VIP
Serveur: Fenrir
Game: FFXI
Posts: 2269
By Fenrir.Jinjo 2014-01-02 19:21:00
You can do that, you just have to define the precast table first.
sets.precast = {}
sets.precast.ChainAffinity = {head = ""}
sets.precast.ChainAffinity == sets.precast['ChainAffinity'] == sets['precast'].ChainAffinity == sets['precast']['ChainAffinity'], you can use whatever
Hades.Triet
Serveur: Hades
Game: FFXI
Posts: 1615
By Hades.Triet 2014-01-02 19:42:09
Yeah I have that line before the Chain Affinity one. I used the Byrth_MNK.lua as a template and worked in my BLU sets. Those are the 2 lines I have it just keeps giving me that error. I even tried spacing between the Chain Affinity and nada. D:
Here is what I have atm. (Don't judge my gear atm lol) Code function get_sets()
sets.precast = {}
sets.precast.ChainAffinity = {head="Mavi Kavuk +2"}
sets.precast.Efflux = {legs="Mavi Tayt +2"}
sets.precast['Requiescat'] = {ammo="Cheruski Needle",head="Uk'uxkaj Cap",neck="Shadow Gorget",
ear1="Moonshade Earring",ear2="Brutal Earring",body="Manibozho Jerkin",hands="Buremte Gloves",
ring1="Aquasoul Ring",ring2="Rajas Ring",back="Atheling Mantle",waist="Shadow Belt",legs="Quiahuiz Leggings",
feet="Thurandaut Boots"}
sets.precast.WS = ammo="Cheruski Needle",head="Uk'uxkaj Cap",neck="Asperity Necklace",
ear1="Moonshade Earring",ear2="Brutal Earring",body="Manibozho Jerkin",hands="Buremte Gloves",
ring1="Epona's Ring",ring2="Rajas",back="Atheling Mantle",waist="Anguinus Belt",legs="Quiahuiz Leggings",
feet="Euxine Nails +3"}
sets.TP = {}
sets.TP.VW = {main="Xiutleato",sub="Genbu's Shield",ammo="Cheruski Needle",head="Uk'uxkaj Cap",neck="Asperity Necklace",
ear1="Bladeborn Earring",ear2="Steelflash Earring",body="Thaumas Coat",hands="Buremte Gloves",
ring1="Epona's Ring",ring2="Rajas Ring",back="Atheling Mantle",waist="Cetl Belt",legs="Quiahuiz Leggings",
feet="Euxine Nails +3"}
sets.TP.DD = {main="Xiutleato",sub="Halachunic Blade",ammo="Cheruski Needle",head="Uk'uxkaj Cap",neck="Asperity Necklace",
ear1="Bladeborn Earring",ear2="Steelflash Earring",body="Thaumas Coat",hands="Buremte Gloves",
ring1="Epona's Ring",ring2="Rajas Ring",back="Atheling Mantle",waist="Cetl Belt",legs="Quiahuiz Leggings",
feet="Euxine Nails +3"}
sets.DT = {neck="Twilight Torque",ear1="Ethereal Earring", ear2="Steelflash",body="Manibozho Jerkin",
hands="Buremte Gloves",ring1="Dark Ring",ring2="Dark Ring",back="Mollusca Mantle",feet="Thurandaut Boots"}
sets.aftercast = {}
sets.aftercast.TP = sets.TP.DD
sets.aftercast.Idle = {ammo="Impatiens",head="Uk'uxkaj Cap",neck="Twilight Torque",
ear1="Bladeborn Earring",ear2="Steelflash Earring",body="Mavi Mintan +2",hands="Serpentes Cuffs",
ring1="Dark Ring",ring2="Dark Ring",back="Shadow Mantle",waist="Cetl Belt",legs="Crimson Cuisses",
feet="Serpentes Sabots"}
send_command('input /macro book 15;wait .1;input /macro set 1')
end
function precast(spell,action)
if sets.precast[spell.english] then
verify_equip()
equip(sets.precast[spell.english])
elseif spell.type=="WeaponSkill" then
equip(sets.precast.WS)
elseif string.find(spell.english,'Waltz') then
equip(sets.precast.Waltz)
end
end
function midcast(spell,action)
end
function aftercast(spell,action)
if player.status =='Engaged' then
equip(sets.aftercast.TP)
else
equip(sets.aftercast.Idle)
end
end
function status_change(new,old)
if T{'Idle','Resting'}:contains(new) then
equip(sets.aftercast.Idle)
elseif new == 'Engaged' then
equip(sets.aftercast.TP)
end
end
function buff_change(status,gain_or_loss)
end
function self_command(command)
if command == 'toggle TP set' then
if sets.aftercast.TP == sets.TP.DD then
sets.aftercast.TP = sets.TP.VW
send_command('@input /echo VW SET')
elseif sets.aftercast.TP == sets.TP.VW then
sets.aftercast.TP = sets.TP.DD
send_command('@input /echo DD SET')
end
elseif command == 'DT' then
equip(sets.DT)
end
end
Fenrir.Jinjo
VIP
Serveur: Fenrir
Game: FFXI
Posts: 2269
By Fenrir.Jinjo 2014-01-02 19:44:30
I find that specific error is often thrown when the line # before the line shown has a syntactic error near the end of it.
Edit: Looking at the file, sec.
Fenrir.Jinjo
VIP
Serveur: Fenrir
Game: FFXI
Posts: 2269
By Fenrir.Jinjo 2014-01-02 19:48:47
Line 11, you forgot a { after =
Quetzalcoatl.Crystalchan
Serveur: Quetzalcoatl
Game: FFXI
Posts: 1184
By Quetzalcoatl.Crystalchan 2014-01-03 12:11:38
I would love to get into figuring out gearswap because it sounds so much better than spellcast! Where can I find all of Byrth's examples? (or even more examples!)
I've only found this thread on BG. I only really see Motenten and some others posting their gearswaps, which are extremely helpful but I need a bit more examples since I'm really horrible at this kind of thing! I don't really go on BG very often so I'm not exactly sure where to find everything there D: it's hard for me to search for since gearswap is a really common term! I tried looking at guildwork too but I'm not familiar with that site either.
Sorry and thank you! D:
Edit: Gah, it was inside the gearswap folder .~. but if there are other completed ones too, that would be awesome to look at! (WHM would be really fantastic!)
Hades.Triet
Serveur: Hades
Game: FFXI
Posts: 1615
By Hades.Triet 2014-01-03 13:47:14
Quetzalcoatl.Crystalchan said: »After installing the Gearswap addon via windower it will place the Gearswap folder into your addons folder. When you open that up there is a folder called "beta_examples_and_information." In there are a few examples for some jobs and a Variables excel file for reference. I just took one of his examples and started filling it in myself, still need some practice though. :x
[+]
Hades.Triet
Serveur: Hades
Game: FFXI
Posts: 1615
By Hades.Triet 2014-01-05 02:05:45
Curious if there is a link to a collection of .lua files like they had for .xml's for spellcast on pastebin (or wherever it was). Getting lost with the ability commands and what not. D:
Fenrir.Jinjo
VIP
Serveur: Fenrir
Game: FFXI
Posts: 2269
By Fenrir.Jinjo 2014-01-05 04:13:06
The fourth feature of Spellcast (%variable replacement in the outgoing text buffer) is currently unhandled. It's not a difficult addon to make, but I have made too many addons and can hardly support the ones that I've released. Someone else will have to take that one.
Tah-dah, done. No reason to ever use spellcast.
By Selindrile 2014-01-05 17:30:56
After reading all this, I want to transition to gearswap, but my god, I'm not following all this yet, (I'm a ***coder) I read that Sylow was making his to be stupid-proof by commenting the crap out of them, but his aren't done yet, are there any ready-ish easy-to-adjust XMLs (would love even a rather basic one) out there? Would love one for every job as I to some extent play them all, sadly.
[+]
Hades.Triet
Serveur: Hades
Game: FFXI
Posts: 1615
By Hades.Triet 2014-01-05 17:41:20
Exactly what I was wondering. I ended up taking Byrth's MNK .lua (as a sort of shell .lua) and adjusted gearsets to my own for a couple jobs (MNK, basic melee BLU, and PLD). Also, someone on here sent me a PM with their .lua (for BLU) and I am looking it over atm trying to decipher what I can.
Ragnarok.Sekundes
Serveur: Ragnarok
Game: FFXI
Posts: 4191
By Ragnarok.Sekundes 2014-01-05 18:49:15
A question. Does gearswap have any special effects on things that take "time" to show up? Things like wyvern hp and such?
Lakshmi.Byrth
VIP
Serveur: Lakshmi
Game: FFXI
Posts: 6184
By Lakshmi.Byrth 2014-01-05 18:59:22
I'm not sure exactly what you're asking, but GearSwap shows you the value in memory for everything except equipment, which it keeps its own registry of. So if you're, for instance, using Release on SMN. You would have to wait a second for your avatar to disappear before you'll officially not have a pet. This is just a limitation of the game and I'm not interested in programming and documenting the hundreds of special exceptions.
[+]
Serveur: Valefor
Game: FFXI
Posts: 19647
By Valefor.Prothescar 2014-01-05 19:16:57
not sure what I'm doing wrong here, but it must be on a fundamental level. I assume there's uncountable errors, mostly because it won't load the file passed line 9.
Code
function get_sets()
--Idle Sets--
sets.Idle = {}
sets.Idle.index = {'Standard','DT'}
Idle_ind = 1
sets.Idle.Standard = {ammo="Cheruski needle",
head="Oce. headpiece +1",neck="Twilight torque", ear1="Ethereal earring", ear2="Heartseeker earring",
body="Hagondes coat",hands="Serpentes cuffs",ring1="Dark ring",ring2="Dark ring",
back="Atheling mantle",waist="Flume belt",legs="Blood cuisses",feet="Serpentes sabots"}
sets.Idle.DT = {ammo="Cheruski needle",
head="Iuitl headgear",neck="Twilight torque", ear1="Ethereal earring", ear2="Heartseeker earring",
body="Hagondes coat",hands="Iuitl wristbands",ring1="Dark ring",ring2="Dark ring",
back="Mollusca mantle",waist="Flume belt",legs="Blood cuisses",feet="Iuitl gaiters"}
--TP Sets--
sets.TP = {}
sets.TP.index = {'Standard', 'Solo', 'AccuracyLite', 'AccuracyFull', 'DT', 'DTAccuracy'}
--1=Standard, 2=Solo, 3=AccuracyLite, 4=AccuracyFull, 5=DT, 6=DTAccuracy--
TP_ind = 2
sets.TP.Standard = {ammo="Cheruski needle",
head="Thurandaut chapeau +1",neck="Asperity necklace", ear1="Dudgeon earring", ear2="Heartseeker earring",
body="Thaumas coat",hands="Manibozho gloves",ring1="Epona's ring",ring2="Rajas ring",
back="Atheling mantle",waist="Twilight belt",legs="Iuitl tights",feet="Manibozho boots"}
sets.TP.Marches = {ammo="Cheruski needle",
head="Thurandaut chapeau +1",neck="Asperity necklace", ear1="Brutal earring", ear2="Suppanomimi",
body="Thaumas coat",hands="Manibozho gloves",ring1="Epona's ring",ring2="Rajas ring",
back="Atheling mantle",waist="Twilight belt",legs="Iuitl tights",feet="Manibozho boots"}
sets.TP.Solo = {ammo="Cheruski needle",
head="Thurandaut chapeau +1",neck="Asperity necklace", ear1="Brutal earring", ear2="Suppanomimi",
body="Hagondes coat",hands="Manibozho gloves",ring1="Epona's ring",ring2="Rajas ring",
back="Atheling mantle",waist="Twilight belt",legs="Iuitl tights",feet="Manibozho boots"}
sets.TP.AccuracyLite = {ammo="Honed tathlum",
head="Thurandaut chapeau +1",neck="Asperity necklace", ear1="Brutal earring", ear2="Suppanomimi",
body="Thaumas coat",hands="Manibozho gloves",ring1="Epona's ring",ring2="Rajas ring",
back="Letalis mantle",waist="Twilight belt",legs="Iuitl tights",feet="Manibozho boots"}
sets.TP.AccuracyFull = {ammo="Honed tathlum",
head="Whirlpool mask",neck="Asperity necklace", ear1="Dudgeon earring", ear2="Heartseeker earring",
body="Thaumas coat",hands="Buremte gloves",ring1="Epona's ring",ring2="Rajas ring",
back="Letalis mantle",waist="Windbuffet belt",legs="Iuitl tights",feet="Manibozho boots"}
sets.TP.DT = {ammo="Cheruski needle",
head="Iuitl headgear",neck="Twilight torque", ear1="Brutal earring", ear2="Suppanomimi",
body="Hagondes coat",hands="Iuitl wristbands",ring1="Dark ring",ring2="Dark ring",
back="Mollusca mantle",waist="Twilight belt",legs="Iuitl tights",feet="Iuitl gaiters"}
sets.TP.DTAccuracy = {ammo="Honed Tathlum",
head="Iuitl headgear",neck="Twilight torque", ear1="Dudgeon earring", ear2="Heartseeker earring",
body="Hagondes coat",hands="Iuitl wristbands",ring1="Dark ring",ring2="Dark ring",
back="Mollusca mantle",waist="Hurch'lan sash",legs="Iuitl tights",feet="Iuitl gaiters"}
--Weaponskill Sets--
sets.WS = {}
sets.WS.Requiescat = {}
sets.WS.Requiescat[1] = {ammo="Cheruski needle",
head="Whirlpool mask",neck="Soil gorget",ear1="Brutal earring",ear2="Moonshade earring",
body="Wayfarer robe",hands="Wayfarer cuffs",ring1="Epona's ring",ring2="Aquasoul ring",
back="Atheling mantle",waist="Soil belt",legs="Quiahuiz leggings",feet="Wayfarer clogs"}
sets.WS.Requiescat[2] = {ammo="Honed tathlum",
head="Whirlpool mask",neck="Soil gorget",ear1="Brutal earring",ear2="Moonshade earring",
body="Wayfarer robe",hands="Buremte gloves",ring1="Epona's ring",ring2="Aquasoul ring",
back="Letalis mantle",waist="Soil belt",legs="Quiahuiz leggings",feet="Wayfarer clogs"}
sets.WS.ChantDuCygne = {}
sets.WS.ChantDuCygne[1] = {ammo="Cheruski needle",
head="Uk'uxkaj cap",neck="Flame gorget",ear1="Bladeborn earring",ear2="Steelflash earring",
body="Espial gambison",hands="Espial bracers",ring1="Epona's ring",ring2="Rajas ring",
back="Rancorous mantle",waist="Windbuffet belt",legs="Manibozho brais",feet="Espial socks"}
sets.WS.ChantDuCygne[2] = {ammo="Honed tathlum",
head="Uk'uxkaj cap",neck="Flame gorget",ear1="Bladeborn earring",ear2="Steelflash earring",
body="Espial gambison",hands="Buremte gloves",ring1="Epona's ring",ring2="Rajas ring",
back="Rancorous mantle",waist="Windbuffet belt",legs="Manibozho brais",feet="Espial socks"}
sets.WS.SanguineBlade = {}
sets.WS.SanguineBlade[1] = {ammo="Erlene's notebook",
head="Hagondes hat",neck="Eddy necklace",ear1="Hecate's earring",ear2="Friomisi earring",
body="Hagondes coat",hands="Mv. bazubands +2",ring1="Archon ring",ring2="Diamond ring",
back="Toro cape",waist="Penitent's rope",legs="Hagondes pants",feet="Mavi basmak +2"}
--Blue Magic Sets--
sets.BlueMagic = {}
sets.BlueMagic.STR = {ammo="Mavi tathlum",
head="Whirlpool mask",neck="Ire torque +1",ear1="Flame pearl",ear2="Flame pearl",
body="Assim. jubbah",hands="Buremte gloves",ring1="Vulcan's ring",ring2="Rajas ring",
back="Zaffre cape",waist="Pipilaka belt",legs="Quiahuiz leggings",feet="Espial socks"}
sets.BlueMagic.STRDEX = {ammo="Cheruski needle",
head="Uk'uxkaj cap",neck="Ire torque +1",ear1="Flame pearl",ear2="Flame pearl",
body="Assim. jubbah",hands="Buremte gloves",ring1="Vulcan's ring",ring2="Rajas ring",
back="Zaffre cape",waist="Pipilaka belt",legs="Manibozho brais",feet="Espial socks"}
sets.BlueMagic.STRVIT = {ammo="Mavi tathlum",
head="Whirlpool mask",neck="Ire torque +1",ear1="Flame pearl",ear2="Flame pearl",
body="Assim. jubbah",hands="Buremte gloves",ring1="Vulcan's ring",ring2="Spiral ring",
back="Zaffre cape",waist="Caudata belt",legs="Quiahuiz leggings",feet="Thurandaut boots +1"}
sets.BlueMagic.STRMND = {ammo="Mavi tathlum",
head="Uk'uxkaj cap",neck="Ire torque +1",ear1="Flame pearl",ear2="Flame pearl",
body="Assim. jubbah",hands="Wayfarer cuffs",ring1="Vulcan's ring",ring2="Aquasoul ring",
back="Zaffre cape",waist="Tarutaru sash",legs="Quiahuiz leggings",feet="Thurandaut boots +1"}
sets.BlueMagic.AGI = {ammo="Mavi tathlum",
head="Uk'uxkaj cap",neck="Ire torque +1",ear1="Flame pearl",ear2="Flame pearl",
body="Assim. jubbah",hands="Iuitl wristbands",ring1="Vulcan's ring",ring2="Rajas ring",
back="Zaffre cape",waist="Pipilaka belt",legs="Quiahuiz leggings",feet="Espial socks"}
sets.BlueMagic.INT = {ammo="Erlene's notebook",
head="Hagondes hat",neck="Eddy necklace",ear1="Hecate's earring",ear2="Friomisi earring",
body="Hagondes coat",hands="Mv. bazubands +2",ring1="Archon ring",ring2="Diamond ring",
back="Toro cape",waist="Penitent's rope",legs="Hagondes pants",feet="Mavi basmak +2"}
sets.BlueMagic.Cures = {ammo="Aqua sachet",
head="Uk'uxkaj cap",neck="Aife's medal",ear1="Loquac. earring",ear2="Novia earring",
body="Wayfarer robe",hands="Buremte gloves",ring1="Aquasoul ring",ring2="Aquasoul ring",
back="Orentania's cape",waist="Pythia sash +1",legs="Quiahuiz leggings",feet="Thurandaut boots +1"}
sets.BlueMagic.Stun = {ammo="Mavi tathlum",
head="Assim. keffiyeh",neck="Eddy necklace",ear1="Loquac. earring",
body="Assim. Jubbah",hands="Mv. bazubands +2",ring1="Prolix ring",ring2="Sangoma ring",
back="Zaffre cape",waist="Twilight belt",legs="Mavi tayt +2",feet="Iuitl gaiters"}
sets.BlueMagic.HeavyStrike = {ammo="Honed tathlum",
head="Whirlpool mask",neck="Ire torque +1",ear1="Flame pearl",ear2="Heartseeker earring",
body="Assim. Jubbah",hands="Buremte gloves",ring1="Vulcan's ring",ring2="Rajas ring",
back="Zaffre cape",waist="Dynamic belt +1",legs="Manibozho brais",feet="Manibozho boots"}
sets.BlueMagic.ChargedWhisker = {ammo="Erlene's notebook",
head="Uk'uxkaj cap",neck="Eddy necklace",ear1="Hecate's earring",ear2="Friomisi earring",
body="Hagondes coat",hands="Buremte gloves",ring1="Diamond ring",ring2="Rajas ring",
back="Toro cape",waist="Pipilaka belt",legs="Hagondes pants",feet="Mavi basmak +2"}
sets.BlueMagic.MagicAccuracy = {ammo="Mavi Tathlum",
head="Assim. keffiyeh",neck="Eddy necklace",ear1="Psystorm earring",ear2="Lifestorm earring",
body="Assim. jubbah",hands="Hagondes cuffs",ring1="Mediator's ring",ring2="Sangoma ring",
back="Zaffre cape",waist="Ovate rope",legs="Mavi tayt +2",feet="Iuitl gaiters"}
sets.BlueMagic.Skill = {ammo="Mavi tathlum",
head="Mirage keffiyeh +2",neck="Jeweled collar",ear1="Loquac. earring",
body="Assim. Jubbah",hands="Mv. Bazubands +2",ring1="Prolix ring",
back="Zaffre cape",waist="Twilight belt",legs="Mavi tayt +2",feet="Iuitl gaiters"}
sets.BlueMagic.SkillRecast = {ammo="Mavi tathlum",
head="Whirlpool mask",neck="Jeweled collar",ear1="Loquac. earring",
body="Assim. Jubbah",hands="Mv. Bazubands +2",ring1="Prolix ring",
back="Swith cape",waist="Twilight belt",legs="Mavi tayt +2",feet="Iuitl gaiters"}
--Utility Sets--
sets.Utility = {}
sets.Utility.Stoneskin = {head="Whirlpool mask",neck="Stone Gorget",ear1="Loquac. earring",ear2="Earthcry earring",
body="Assim. jubbah",hands="Stone Mufflers",ring1="Prolix ring",
back="Swith cape",waist="Siegel sash",legs="Haven hose",feet="Iuitl gaiters"}
sets.Utility.Phalanx = {head="Whirlpool mask",neck="Colossus's torque",ear1="Loquac. earring",ear2="Augment. earring",
body="Assim. jubbah",hands="Manibozho gloves",ring1="Prolix ring",
back="Swith cape",waist="Pythia sash +1",legs="Portent pants",feet="Iuitl gaiters"}
sets.Utility.Steps = {ammo="Honed tathlum"
head="Whirlpool mask",ear2="Heartseeker earring",
body="Thaumas coat",hands="Buremte gloves",
back="Letalis cape",waist="Tarutaru sash",legs="Manibozho brais",feet="Manibozho boots"}
--Job Ability Sets--
sets.precast = {}
sets.precast.JA = {}
sets.precast.JA.ChainAffinity = {feet="Assmiliator's Charuqs"}
sets.precast.JA.BurstAffinity = {feet="Mavi Basmak +2"}
sets.precast.JA.Efflux = {legs="Mavi tayt +2"}
--Precast Sets--
sets.precast.FC = {}
sets.precast.FC.Standard = {head="Athos's Chapeau",neck="Jeweled collar", ear1="Loquac. Earring",
body="Mirke wardecors",hands="Thaumas Gloves",
back="Swith Cape",waist="Witful Belt",legs="Enif Cosciales",feet="Chelona Boots"}
sets.precast.FC.Blue = {head="Athos's Chapeau",neck="Jeweled collar", ear1="Loquac. Earring",
body="Mavi Mintan +2",hands="Thaumas Gloves",
back="Swith Cape",waist="Witful Belt",legs="Enif Cosciales",feet="Chelona Boots"}
end
function precast(spell)
if spell.action_type == 'Magic' then
equip(sets.precast.FC.Standard)
elseif spell.action_type == 'BlueMagic' then
equip(sets.precast.FC.Blue)
end
end
function midcast(spell)
if spell.name == 'Vertical Cleave','Death Scissors','Empty Thrash','Dimensional Death','Quadrastrike','Bloodrake','Circle Blade' then
equip(sets.BlueMagic.STR)
if buffactive['Chain Affinity'] then
equip(sets.JA.ChainAffinity)
end
if buffactive['Efflux'] then
equip(sets.JA.Efflux)
end
end
if spell.name == 'Disseverment','Hysteric Barrage','Frenetic Rip','Seedspray','Vanity Dive','Goblin Rush','Paralyzing Triad' then
equip(sets.BlueMagic.STRDEX)
if buffactive['Chain Affinity'] then
equip(sets.JA.ChainAffinity)
end
if buffactive['Efflux'] then
equip(sets.JA.Efflux)
end
end
if spell.name == 'Quad. Continuum','Delta Thrust','Cannonball','Glutinous Dart' then
equip(sets.BlueMagic.STRVIT)
if buffactive['Chain Affinity'] then
equip(sets.JA.ChainAffinity)
end
if buffactive['Efflux'] then
equip(sets.JA.Efflux)
end
end
if spell.name == 'Whirl of Rage' then
equip(sets.BlueMagic.STRMND)
if buffactive['Chain Affinity'] then
equip(sets.JA.ChainAffinity)
end
if buffactive['Efflux'] then
equip(sets.JA.Efflux)
end
end
if spell.name == 'Benthic Typhoon','Final Sting','Spiral Spin' then
equip(sets.BlueMagic.AGI)
if buffactive['Chain Affinity'] then
equip(sets.JA.ChainAffinity)
end
if buffactive['Efflux'] then
equip(sets.JA.Efflux)
end
end
if spell.name == 'Gates of Hades','Leafstorm','Firespit','Regurgitation','Corrosive Ooze','Acrid Stream','Thermal Pulse','Magic Hamme','Evryone. Grudge','Water Bomb','Dark Orb','Thunderbolt','Tem. Upheaval','Embalming Earth','Foul Waters','Rending Deluge','Droning Whirlwind' then
equip(sets.BlueMagic.INT)
if buffactive['Burst Affinity'] then
equip(sets.JA.BurstAffinity)
end
end
if spell.name == 'Magic Fruit','Plenilune Embrace','Wild Carrot','Pollen' then
equip(sets.BlueMagic.Cures)
end
if spell.name == 'Head Butt','Sudden Lunge','Blitzstrahl' then
equip(sets.BlueMagic.Stun)
end
if spell.name == 'Heavy Strike' then
equip(sets.BlueMagic.HeavyStrike)
end
if spell.name == 'Charged Whisker' then
equip(sets.BlueMagic.ChargedWhisker)
if buffactive['Burst Affinity'] then
equip(sets.JA.BurstAffinity)
end
end
if spell.name == 'Frightful Roar','Infrasonics','Barbed Crescent','Tourbillion','Cimicine Discharge','Sub-zero smash','Filamented Hold','Mind Blast','Sandspin','Hecatomb Wave','Cold Wave' then
equip(sets.BlueMagic.MagicAccuracy)
end
if spell.name == 'MP Drainkiss','Digest','Blood Saber','Blood Drain','Osmosis','Occultation','Magic Barrier','Diamondhide','Metallic Body','Retinal Glare' then
equip(sets.BlueMagic.SkillRecast)
end
if spell.name == 'Stoneskin' then
equip(sets.Utility.Stoneskin)
end
if spell.name == 'Phalanx' then
equip(sets.Utility.Phalanx)
end
if spell.name == 'Box Step','Quickstep','Violent Flourish','Animated Flourish' then
equip(sets.Utility.Steps)
end
if player.status=='Engaged' then
equip_TP_set()
else
equip(sets.Idle.Standard)
end
end
function status_change(new,old)
if new == 'Engaged' then
equip_TP_set()
else
equip(sets.Idle.Standard)
end
end
function equip_TP_set()
if TP_ind == 1 and ( (buffactive['march'] == 2 and buffactive['haste']) or (buffactive['embrava'] and buffactive['haste']) ) then
equip(sets.TP['Marches'])
else
equip(sets.TP[sets.TP.index[TP_ind]])
end
end
function self_command(command)
if command == 'toggle TP set' then
TP_ind = TP_ind +1
if TP_ind > #sets.TP.index then TP_ind = 1 end
send_command('@input /echo ----- TP Set changed to '..sets.TP.index[TP_ind]..' -----')
equip(sets.TP[sets.TP.index[TP_ind]])
elseif command == 'toggle Idle set' then
Idle_ind = Idle_ind +1
if Idle_ind > #sets.Idle.index then Idle_ind = 1 end
send_command('@input /echo ----- Idle Set changed to '..sets.Idle.index[Idle_ind]..' -----')
equip(sets.Idle[sets.Idle.index[Idle_ind]])
elseif command == 'equip TP set' then
equip_TP_set()
elseif command == 'equip Idle set' then
equip_Idle_set()
end
end
error i'm getting right now is:
User file problem: *path*:10: '}' expected (to close '{' at line 9) near 'head'
Hades.Triet
Serveur: Hades
Game: FFXI
Posts: 1615
By Hades.Triet 2014-01-05 19:17:59
At least you made it to 9. Lol mine stopped at 3
[+]
Quetzalcoatl.Mystery
Serveur: Quetzalcoatl
Game: FFXI
Posts: 15
By Quetzalcoatl.Mystery 2014-01-05 19:38:49
Does GearCollector work with Gearswap?
[+]
Just looking for someone to explain this addon a bit for me. It looks like it is an alternative to Spellcast.
Is it going to be replacing Spellcast? In which ways is it better or worse. I don't know any programming but I've slowly learned more and more about spellcast and the 'language' used in gearswap is confusing to me.
It says it uses packets so it potentially could be more detectable? but does that also eliminate any lag that spellcast may encounter?
I plan on redoing my PUP xml to include pet casting sets thanks to the new addon petschool. I'm just not sure if it's worth it to just wait until gearswap gets more popular or to go ahead and do it in spellcast.
If anyone could give me more info I'd greatly appreciate it.
|
|